﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Newtonsoft.Json;
using ProtocoloNameSpace;
using HTSwitchServerNamespace.ar.com.horsetrack;
using HTSwitchServerNamespace.DataMocks;
using System.Net.Sockets;

namespace HTSwitchServerNamespace.Protocols
{
    public class Protocol_IPhoneGps : IProtocol
    {
        #region MetodosDatosDispositivoIPhone
        public bool ObteneryEnviarDatosDelDispositivo(string strMensajeDelDispositivo,TcpClient tcpClient)
        {
            ///DECLARACION DE VARIABLES
            HTSwitchServerNamespace.ar.com.horsetrack.DatosGPS objDatosGPS = new HTSwitchServerNamespace.ar.com.horsetrack.DatosGPS();
            ControlHorseData objContext = new ControlHorseData();
            DataMockIphone objIphoneData = new DataMockIphone();
            ar.com.horsetrack.HorsetrackWebService webServiceHandler = new ar.com.horsetrack.HorsetrackWebService();
            ar.com.controlyseguimiento.www.ControlYSeguimiento objContextControl = new ar.com.controlyseguimiento.www.ControlYSeguimiento();


            ///INICIO EL CUERPO DEL PROGRAMA
            try
            {
                ///EJEMPLO DE ENVIO {"Id":"And4GPlay","Lat":"-34.55554815999999","Lng":"-58.46642887","Alt":"0.0","Spe":"0.0","IMEI":"358306041574731","Mail":"j","User":"lala","Pass":"pepe"}
                objIphoneData = JsonConvert.DeserializeObject<DataMockIphone>(strMensajeDelDispositivo);
            }
            catch (Exception ex)
            {
                //CLogger.Append("ERROR Obteneiendo JSON: " + ex.ToString(), CLogger.ERROR);
                throw ex;
            }

           
 ////////////////////////////////////////////////////////////////////PLATAFORMA NUEVA ///////////////////////////////////////7//            
            try
            {
                if ((objIphoneData != null)&&(objIphoneData.Mail!=null)&&(objIphoneData.Mail!="Not defined") && (objIphoneData.Lat != null) && (objIphoneData.Lng != null))
                {

                    CLogger.Append("*************************NEW PLATFORM********************", CLogger.INFO);

                    #region Validar Nueva plataforma

                    if (objContextControl.ValidateImei(objIphoneData.IMEI) == true)
                    {
                        //CLogger.Append("Imei encontrado:" + objGPSAndroidData.IMEI, CLogger.INFO);

                        if (objContextControl.IsFirstTimeActivation(objIphoneData.Mail) == true)  //AVERIGUA SI ES PRIMERA VES PARA ACTIVAR
                        {
                            if (objContextControl.FirstTimeActivation(objIphoneData.IMEI, objIphoneData.Mail) == true)  //ACTIVA POR PRIMERA VEZ
                            {
                                CLogger.Append("**NEW PLATFORM** IPHONE Se activa por primera vez el usuario: " + objIphoneData.Mail + " con IMEI:" + objIphoneData.IMEI, CLogger.INFO);
                                //CLogger.Append("NOKIA Actualizando usuario con IMEI:" + objGPSNokiaData.IMEI, CLogger.INFO);
                                objContextControl.UpdateCoordinates(objIphoneData.IMEI,
                                                                    objIphoneData.Mail,
                                                                    objIphoneData.Lat,
                                                                    objIphoneData.Lng,
                                                                    "0",
                                                                    objIphoneData.Alt,
                                                                    objIphoneData.Spe,
                                                                    objIphoneData.Batt
                                                                    );
                                CLogger.Append("**NEW PLATFORM** IPHONE Actualizo correctamente - Mail: " + objIphoneData.Mail + " - IMEI:" + objIphoneData.IMEI, CLogger.INFO);
                            }

                        }
                        else
                        {              //IMEI CORRECTO

                            objContextControl.UpdateCoordinates(objIphoneData.IMEI,
                                                                objIphoneData.Mail,
                                                                objIphoneData.Lat,
                                                                objIphoneData.Lng,
                                                                "0",
                                                                objIphoneData.Alt,
                                                                objIphoneData.Spe,
                                                                objIphoneData.Batt
                                                                );
                            CLogger.Append("**NEW PLATFORM** IPHONE Actualizo correctamente - Mail: " + objIphoneData.Mail + " - IMEI:" + objIphoneData.IMEI, CLogger.INFO);

                        }
                    }
                    else
                    {
                        CLogger.Append("**NEW PLATFORM** IMEI INVALIDO - IMEI:" + objIphoneData.IMEI, CLogger.INFO);

                    }
                    #endregion

                }
                else
                {

                    CLogger.Append("**NEW PLATFORM** IPHONE DATOS ENVIADOS INVALIDOS O VACIOS " + objIphoneData.Mail, CLogger.INFO);
                    return false;
                }

            }
            catch (Exception ex)
            {
                //throw new Exception("ERROR EN VALIDACION O CREACION DE NUEVO USUARIO" + objGPSAndroidData.Mail);
                CLogger.Append("**NEW PLATFORM** IPHONE ERROR EN NUEVO VALIDATE: " + ex.Message, CLogger.ERROR);
            }


            CLogger.Append("*************************OLD PLATFORM********************", CLogger.INFO);
 ////////////////////////////////////////////////////////////////////PLATAFORMA VIEJA ///////////////////////////////////////7//            
            try
            {
                if ((objIphoneData != null) && (objIphoneData.Mail != null) && (objIphoneData.Mail != "Not defined") && (objIphoneData.Lat != null) && (objIphoneData.Lng != null))
                {
                    if (webServiceHandler.ExisteImei(objIphoneData.IMEI) == true)
                    {
                        //CLogger.Append("EXISTE IMEI - DEBUG ", CLogger.INFO);
                        objDatosGPS = objContext.obtenerDatosGPSIPhone(objIphoneData);
                    }
                    else
                    {
                        // CLogger.Append("NO EXISTE IMEI - DEBUG ", CLogger.INFO);
                        string[] strClientHost = new string[5];
                        string strMensaje;
                        if (objContext.boAgregarPosibleUsuarioNuevo(objIphoneData.User, objIphoneData.Pass, objIphoneData.Mail, objIphoneData.IMEI) == true)
                        {
                            CLogger.Append("**OLD PLATFORM** Nuevo Usuario en el Sistema: User: " + objIphoneData.User + " - Mail: " + objIphoneData.Mail, CLogger.INFO);
                            objDatosGPS = objContext.obtenerDatosGPSIPhone(objIphoneData);
                            strClientHost[0] = "mail.horsetrack.com.ar";
                            strClientHost[1] = "25";
                            strClientHost[2] = "activaruser@horsetrack.com.ar";
                            strMensaje = "Nuevo Usuario IPhone en el sistema. Usuario: " + objIphoneData.User + " - IMEI: " + objIphoneData.IMEI + " - MAIL: " + objIphoneData.Mail;
                            HTMailSenderNamespace.SimpleAsynchronousExample.MailActivarUsuario(strClientHost, "Nuevo ususario Iphone", "activaruser@horsetrack.com.ar", strMensaje);
                        }
                    }
                }
                else
                {

                    CLogger.Append("**OLD PLATFORM** IPHONE DATOS ENVIADOS INVALIDOS O VACIOS " + objIphoneData.Mail, CLogger.INFO);
                    return false;
                }
            }
            catch (Exception ex)
            {
                CLogger.Append("**OLD PLATFORM** ERROR Obteniendo DatosGPS IPHONE DB HT: " + ex.Message, CLogger.ERROR);
                throw ex;
            }


            if (webServiceHandler.actualizarDatosGPSenDB(objDatosGPS) == true)  //ACTUALIZACION DATOS EN PLATAFORMA HORSETRACK
            {
                CLogger.Append("**OLD PLATFORM** DATOS ACTUALIZADOS CORRECTAMENTE OK", CLogger.ERROR);
            }
            else
            {
                throw new Exception("**OLD PLATFORM** IPHONE NO SE PUDO ACTUALIZAR LA DB DE HORSETRACK");
            }

            return true;
        }
        #endregion


        #region PARSE IPHONE
        public ar.com.horsetrack.DatosGPS Parse(DataMockMgr mockObject)
        {
            throw new NotImplementedException();
        }
        #endregion
    }
}
